﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sinacor.UI.Bovespa.Clientes.Communication.Bovespa.Cliente.Correspondente;
using Sinacor.Infra.UI.Common;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Sinacor.Infra.UI.Controls.SmartClient;
using Sinacor.UI.Bovespa.Clientes.Presenter;


/// Historico:
/// Data : 12/08/2009
/// Autor: Felipe Barbosa Gonzalez
/// 7Comm Informativa   
/// Obs.:Criado os metodo  AlterarCorrespondente, ConsultarCorrespondente, Correspondentes ,ExcluirCorrespondente, FiltroCorrespondente, IncluirCorrespondente , Inicializar e ValidarCodigoCliente
/// 
namespace Sinacor.UI.Bovespa.Clientes.Presenter
{
    public class CadastroCorrespondentes : BasePresenter<ICadastroCorrespondente>
    {
        #region Campos

        private Communication.Correspondente _communicationCorrespondente = null;
        private Communication.Cliente _communicationCliente = null;
        private ModelCollection<Model.Correspondente> _correspondentes = new ModelCollection<Sinacor.UI.Bovespa.Clientes.Model.Correspondente>();
        private Communication.ParametroBolsa _communicationParametroBolsa = null;

        #endregion

        #region Propriedades

        public ModelCollection<Model.Correspondente> Correspondentes
        { 
            get { return _correspondentes; }
            set { _correspondentes = value; }
        }

        public Model.Parameter.FiltroCorrespondente FiltroCorrespondente{ get; set; }

        /// <summary>
        /// Parametro bolsa
        /// </summary>
        public Model.ParametroBolsa ParametroBolsa { get; set; }

        #endregion

        #region Construtor

        /// <summary>
        /// Construtor
        /// </summary>
        /// <param name="view">View</param>
        public CadastroCorrespondentes(ICadastroCorrespondente view)
            : base(view)
        {
            this._communicationParametroBolsa = new Sinacor.UI.Bovespa.Clientes.Communication.ParametroBolsa(this.Session);
            this._communicationCorrespondente = new Communication.Correspondente(this.Session);
            this._communicationCliente = new Sinacor.UI.Bovespa.Clientes.Communication.Cliente(this.Session);
            // Inicializando models
            this.Correspondentes = new ModelCollection<Sinacor.UI.Bovespa.Clientes.Model.Correspondente>();
            this.FiltroCorrespondente = new Sinacor.UI.Bovespa.Clientes.Model.Parameter.FiltroCorrespondente();
        }

        #endregion

        #region Metodos

        /// <summary>
        /// Consulta parametro bolsa
        /// </summary>
        public void ObterParametroBolsa()
        {
            try
            {
                this.ParametroBolsa = this._communicationParametroBolsa.ObterParametroBolsa();
            }
            catch (Exception ex)
            {
                this.HandleException(ex);
            }
        }

        public bool AlterarCorrespondente(Model.Correspondente correspondente)
        {
            try
            {
                _communicationCorrespondente.AlterarCorrespondente(correspondente);
                this.View.InformarCorrespondenteAlteradoComSucesso();
                this.View.AtualizarGradeCorrespondente();
                return true;
            }
            catch (Exception ex)
            {
                base.HandleException(ex);
                return false;
            }
        }

        public void ConsultarCorrespondentes()
        {
            try
            {
                _correspondentes = new Communication.Correspondente(this.Session).ConsultarCorrespondentes(FiltroCorrespondente);
                if (_correspondentes == null || _correspondentes.Count == 0)
                {
                    this.View.InformarNenhumCorrespondenteEncontrado();
                }
                View.AtualizarGradeCorrespondente();
            }
            catch (Exception ex)
            {
                base.HandleException(ex);

            }
        }


        public bool ExcluirCorrespondente(Model.Parameter.FiltroCorrespondenteChave filtroCorrespondente)
        {
            try
            {
                if (this.View.ConfirmarExclusaoCorrespondente())
                {
                    _communicationCorrespondente.ExcluirCorrespondente(filtroCorrespondente);
                    this.View.InformarCorrespondenteExcluidoComSucesso();
                    this.View.AtualizarGradeCorrespondente();
                    return true;
                }
                else
                {
                    return false;
                }

            }
            catch (Exception ex)
            {
                base.HandleException(ex);
                return false;
            }
        }

        public bool IncluirCorrespondente(Model.Correspondente correspondente)
        {
            try
            {
                _communicationCorrespondente.IncluirCorrespondente(correspondente);
                this.View.InformarCorrespondenteSalvoComSucesso();
                this.View.AtualizarGradeCorrespondente();
                return true;
            }
            catch (Exception ex)
            {
                base.HandleException(ex);
                return false;
            }
        }

        public void Inicializar()
        {
            try
            {
                this.ObterParametroBolsa();
                
                FiltroCorrespondente = new Sinacor.UI.Bovespa.Clientes.Model.Parameter.FiltroCorrespondente();
                Sinacor.UI.Bovespa.Clientes.Model.Parameter.FiltroCorrespondente filtro = new Sinacor.UI.Bovespa.Clientes.Model.Parameter.FiltroCorrespondente();
                Correspondentes = _communicationCorrespondente.ConsultarCorrespondentes(filtro);
                this.View.AtualizarGradeCorrespondente();

            }
            catch (Exception ex)
            {
                base.HandleException(ex);
            }
        }

        public void ValidarCodigoCliente(Model.Parameter.FiltroCliente filtroCliente)
        {
            Model.Parameter.Cliente cliente = this._communicationCliente.ObterCliente(filtroCliente);
            if (cliente != null)
            {
                this.View.CarregarCliente(cliente);
            }
        }

        #endregion
    }
}
